window.onload = function () {
    // var name = 'sonia';
    // function fun(name:string):void{
    //     console.log('hello '+name)
    //     // return name;
    // }
    // fun(name)
    // // 对于可复用的方法 要兼容更多的类型
    // function  fun2(name:any):any{
    //     console.log('hello '+name)
    //     return name;
    // }
    // fun2('123');
    // // 泛型  T 泛型变量表示任意类型
    // function  fun3<T>(name:T):T{  
    //     console.log('hello '+name)
    //     return name;
    // }
    // fun3<number>(123);
    // fun3<number | string>(123); //T 可以表示多个类型
    // // 类型推断 编译器会根据参数自动推断为类型
    // fun3(456); 
    // // 函数声明 函数定义
    // function fun5<T>(name:T):T{
    //     return name;
    // }
    // // 函数表达式
    // let fun6 = function<A>(name:A):A{
    //     return name;
    // }
    // // ES6 
    // let fun7 = <T>(name:T):T=>name;
    // let fun8 = <T>(name:T):T=>name;
    // fun8<Object>('1')
    //接口在函数中的运用
    function f1(name) {
        console.log(name);
    }
    f1({ name: 'abc' });
    function f2(name) {
        console.log(name);
    }
    f2({ name: '123' });
    // JS传入两个参数 匹配第二个参数是否匹配第一个参数的内容
    var f3 = function (str1, str2) {
        console.log(name);
        var index = str1.indexOf(str2);
        return index != -1;
    };
    console.log(f3('http://123.com', 'c'));
};
